"""
协程：可以和其他子程序协作的子程序，通过协程可以实现协作式并发
离线计算：数据早就准备好了，直接用已有的数据进行处理
流式计算：数据是临时给过来的，根据给到的数据进行处理
"""
import random


def calc_average():
    total, count, value, avg_value = 0, 0, None, None
    while True:
        value = yield avg_value
        total += value
        count += 1
        avg_value = total / count


def main():
    gen = calc_average()
    print(type(gen))
    # 将生成器做预激，生成器会升级为协程
    # 方法一：gen.send(None)
    # 方法二：next(gen)
    gen.send(None)
    for _ in range(10):
        num = random.randint(1, 100)
        print(num, gen.send(num))


if __name__ == '__main__':
    main()
